package es.unileon.aic.floatingpointalu.core;

import es.unileon.aic.floatingpointalu.core.IEEE754.*;

/**
 * Clase que se encarga de invocar los algoritmos del IEEE754
 * @author Abel Mayorga Gonz&aacute;lez
 * @author Beatriz Justel Garc&iacute;a
 * @version 1.0
 *
 */
public class Calculator {
	
	/** Se&ntilde;ala la operaci&oacute;n suma **/
	public static final int ADDITION = 1;
	/** Se&ntilde;ala la operaci&oacute;n resta **/
	public static final int SUBSTRACTION = 2;
	/** Se&ntilde;ala la operaci&oacute;n multiplicaci&oacute;n **/
	public static final int MULTIPLICATION = 3;
	/** Se&ntilde;ala la operaci&oacute;n divisi&oacute;n **/
	public static final int DIVISION = 4;
	
	/**
	 * Realiza la llamada a la funci&oacute;n correspondiente
	 * @param n1 Operando 1
	 * @param n2 Operando 2
	 * @param operation Operaci&oacute;n a realizar
	 * @return Devuelve el resultado de la operaci&oacute;n indicada
	 */
	public static float performCalculation(float n1, float n2, int operation){
		int resultado = 0,op1,op2;
		op1 = Float.floatToRawIntBits(n1);
		op2 = Float.floatToRawIntBits(n2);
		switch (operation){
		case ADDITION:
			resultado = IEEE754_Package.sumaComaFlotante(op1, op2);
			break;
		case SUBSTRACTION:
			resultado = IEEE754_Package.restaComaFlotante(op1,op2);
			break;
		case MULTIPLICATION:
			resultado = IEEE754_Package.multiplicarComaFlotante(op1, op2);
			break;
		case DIVISION:
			resultado = IEEE754_Package.dividirComaFlotante(op1, op2);
			break;
		}
		return Float.intBitsToFloat(resultado);
	}

}
